数学の学び方(光成 滋生さん)
数学の学び方の文脈で紹介したかったのだけど第2〜4回と分散してて指し示しにくかったのでCC-BY-SAだからここに転載することにしました。 全然関係ないけどこのへんまでリアルタイムで編集を観測してたtakker.icon
…とここまで個人projectに書いてから「いや、まず井戸端に置いた方が面白いことが起こる可能性が高いのでは?」と思ったのでこっちに来ましたnishio.icon original
◆◆◆
光成さんは未踏ソフトウェア創造事業で楕円曲線上のペアリング暗号を開発し、天才プログラマー/スーパークリエータ認定を受けています。楕円曲線という言葉を聞いたことのある方は多いでしょうが、 多いのか…?yosider.icon
フェルマーの最終定理周りのエピソードなら、結構知っている人いるんじゃないかな
数学的にきちんと理解している人は少ないかと思います。今回は楕円曲線を糸口に、光成さんの数学の学び方を探求していきます。
◆◆◆
nishio~.icon光成さんが楕円曲線を理解したのは、どのタイミングだったんですか?
光成 滋生.icon「理解した」なんて大層なことは言えないけど、勉強したのは大学の4回生くらい。
nishio~.iconなぜ、それを学ぼうと思ったんですか?
光成 滋生.icon数学の啓蒙書で「一番きれいなジャンルのひとつだ」と書いてあったから、ですかね。
nishio~.iconきれいなジャンルっていうのは、整数論ということですか?
光成 滋生.iconいや、違います。
楕円曲線は
1点で交わる概念なんです。逆に言えば楕円曲線はどのジャンルとも密接に関係している。
nishio~.icon幾何と代数と解析がつながり合う、交通の要所みたいなところが楕円曲線だっていうこと?
光成 滋生.iconそうですね、って言い切っちゃうと詳しい人に怒られるかもしれないですけど。そういう部分らしいと啓蒙書で読んで、知っておきたいと思って学んだ。
光成 滋生.iconそうです。
どう学ぶか?
nishio~.iconなるほど。新しいものを学ぶとき、具体的な方法としてはどういうことをしていますか?
nishio~.iconえっ、……教科書を……、読む……ですか?
光成 滋生.iconそれしかないですね。
それ以外ではなくこの方法を選んでいる理由が気になるblu3mo.icon
nishio~.iconそ、そうですか……。教科書を読んでいて「よく分からないな」と思うところが出てきて、心が折れそうになることはありました?
光成 滋生.iconそれはいくらでもある。
nishio~.iconじゃあ、心折れそうな状況を解決するために、どういう行動をしましたか?
光成 滋生.iconそういうときは考えるしかないですね。
nishio~.icon考える……ですか。……ええと、何をどう考えるんです?
光成 滋生.icon何で分からないのか。
nishio~.iconうーん……じゃあ、具体的に僕がつまずいたことを例にあげましょう。
光成さんの高校生向けの講義「新しい暗号技術」で「楕円曲線はトーラスと一致する」と紹介されているのを聞いて、僕はその理由が気になったのでWikipediaの説明を読んだのだけど、よく分からなかった。 nishio~.icon無理ですか!
nishio~.iconWikipediaの解説文の書き方が、現時点で僕が持ってる知識では理解できない書き方になってる?
光成 滋生.iconそうですね、届かない。
nishio~.iconその問題を解決するには、僕は何をすれば良かったのでしょう?
光成 滋生.iconそれは難しいな。あまりそういうやり方ってしたことがないですね。数学の普通の教科書なら前提知識がゼロの状況から、いきなりそんなことを説明したりはしないのです。 nishio~.iconなるほど。
どう学んだか?
nishio~.icon光成さんが何かを学んだ過程を具体的に聞きたいです。
光成 滋生.icon例えば「球の体積が4/3 πr3になることは積分を使えば分かる」と本に書いてあったら
「積分ってなんだろう」って思うわけです。
で、積分の解説が書いてある本を見る。
見たら三角関数とかがいっぱい出てくるわけです。
じゃ「今度は三角関数の本を読んでみよう」となる。
そのうち「そもそも関数がよく分かんない」となって、
関数の本を見て、
というのを3年くらいかけて知りたいことにたどり着いたことありますけど、そういうのですかね?
3年ってえぐいな……「別に好きじゃないけどまあ知ってみたさあるし?」くらいの気持ちでは無理だ……sta.icon
最初から3年くらいかかると思ってやるというより、振り返ってみたら3年経ってたという感じだと思うtakker.icon
nishio~.iconそれって、期待通りの挙動をしないプログラムの「悪さをしてる原因」がどこにあるのか犯人捜しをやっていくのと同じで、「積分で球の体積が求まる」を「自分が理解できていない」という問題の犯人はどこかを探していった感じですか?
光成 滋生.iconそうですね。
nishio~.icon本を読んで分からない単語、分からない概念をどんどんと掘り下げていくんですね。
光成 滋生.icon戻っていってようやく、「あ、こうやって計算してできるんだ」と分かる。
nishio~.iconこのプロセスが「考える」ということですか? nishio~.iconなるほど、これは情報を探してるだけで、「考える」というのは別のことだと。
数学科の「教科書を読む」訓練
nishio~.icon例えば「この本が教科書です」と先生に言われたとする。
光成 滋生.iconそうですね。「読む」といったら、一字一句読むわけです。何か分からないなら進まない。セミナーに行くと「説明してください」と言われる。そこで「これはこうです、こう書いてます」って言うと、先生に「本当ですか」って言われるんです。「本当だと思います」と言ったら「じゃあ、示してください」と言われる。全部自分の言葉で説明できなければいけない。 文学作品の講読でも似たようなことが課せられるcFQ2f7LRuLYP.icon
cFQ2f7LRuLYP.iconの場合は古典作品の講読で、一語一語の意味や品詞分解、歌であれば作者の略歴と詠まれた場面についての下調べなどが必要
辞書から引いてきてこうですというと、先生から「本当ですか、どうしてそう考えられるのですか」とツッコまれる
このとき適切な用例をあげたり典拠を示したりする必要がある
わかったフリをしたり強引な用例を出すと論攻めにあって爆発する
なお数学の厳密さには到底及ばないとは思う
同じく似た経験をしているはるひ.icon
物理だとわからないことがあっても先に進んで戻ったらわかることがありそう基素.icon
nishio~.iconという訓練を大学でさせられているということですか?
テキストを先へ先へと読み進めるだけが目的ではないということですねhatori.icon
工学だと実験をして当てはめないといけないからここまで丁寧に読む時間はない基素.icon 分かってないけどとりあえず先に進んでみませんか?って言ったらなんて言うんだろうyosider.icon
nishio~.icon「自分が分かっている」と自信の持てるゾーンと、持ててないゾーンを明確に分ける、と。なるほど。それは「考える」とは別なんですか。
nishio~.icon今すでに持っている知識があって、
与えられた知識が「分からない」ときに、
それを「分かる」ようになるためには、
持ってる材料で「考え」てたどり着くしかないということですか?
光成 滋生.iconそうですね、増やす。
何かの定理だったら、証明を読んで、まず写経しますよね。 そして、1文ずつ「確かにそうだな」と確認する。
そのときに「この条件がなかったら駄目なんだ」っていう反例を作るわけです。 nishio~.icon例えば「3つの条件A、B、Cが満たされるならば、Xが成り立つ」って書いてあるときに「Aがなかったらなぜ成り立たなくなるのか」を「考える」?
光成 滋生.iconはい。無くても成り立つんだったら、無くていいはずなんで、どこかに使ってるから書いてあるんですね。そのギャップを見る。優れた人は、反例を作るのが上手な人が多いですね。私は、あんまりできなかったけど。 ε-δ論法の条件の意味を考えるときにとことん頭の中でグラフ書いていたtakker.icon 条件を満たさないとどうなるか、具体的な函数を作って検討する
なるほどblu3mo.icon*2
Scrapboxで授業のノートを取る時に、
教科書に書いてあることはアイコンなし、それを元に自分で考えたことにはアイコンをつけて書いている
後者が「増や」している部分なのかなと思ったblu3mo.icon
◆◆◆
nishio~.icon
正直なところ、新しいものを学ぶための具体的な方法論として「教科書を読むしかない」、読んでよく分からないときの対処として「考える」という回答には面食らいました。
よくよく聞いてみると、この「読む」という言葉は私がイメージしていたものよりも狭い意味で使われていることが分かりました。「『読む』といったら、一字一句読むわけです。何か分からないなら進まない」とのこと。 読むことや考えることに対する考え方が、私とは大きく違うのだなと痛感させられました。
ところで、この読み方は小崎さん小崎資広.iconが第6回で語っていた「分からなくてもとにかく読み進めることが大事」という主張とはまったく逆です。この違いはなぜ起こるのでしょう? 次回はここを掘り下げていきます。(つづく) 第5回では...nishio.icon
◆◆◆
前回、数学科での「教科書を読む」は、一歩一歩きちんと自分の言葉で説明できるか確認し、分からなければ絶対に先に進まない読み方だと伺いました。この読み方は小崎さんが第6回で語っていた「分からなくてもとにかく読み進めることが大事」という主張とはまったく逆です。この違いはなぜ起こったのでしょう? ◆◆◆
nishio~.icon数学科での「教科書を読む」とは、きちんと自分の言葉で説明できるまで先に進まない読み方だと理解しました。これは実は以前インタビューした小崎さんの意見と反対なんです。小崎さんは「分からなくてもとにかく最後まで読むことが大事」という意見でした。 光成 滋生.icon小崎さんは物理学科ですよね。
nishio~.icon物理ですね。
光成 滋生.icon物理はまた違うと思うんです。
学部の最初って、逆転現象が起こるんです。
物理で出てくる数式を、数学ではまだ教えてない。
そういうときは「こういう数式で表現するんだ、とりあえずそういうもんだ」と認めて、イメージを先に作っていくスタイルになっちゃうの、最初は仕方ないと思うんですよね。
nishio~.iconなるほど。
光成 滋生.icon実際、物理の素粒子や量子力学って、実際の現象に対して何となく数式っぽいもので理論を構築して、数学が後からそれを厳密化していったケースも多いんです。物理の人は直感で理論を作っていって、それが正しいことを後追いで示すのはありなんです。ならば理解だってそんな風に先に進んでいったっていいと思います。
nishio~.icon物理は自然現象が先にあって、それを表現する目的のために数式を手段としてモデルを作る。一方数学は自然現象とか関係なく、人間がロジックを積み上げて作っていってる。その違いが学び方に出てきてるんでしょうか。
光成 滋生.iconそうだと思います。数学で難しいのは、ある定義が与えられたときに「何でそんな定義なの」と理解する部分が大きい。例えば2回生とか3回生の位相空間で開集合の定義が出てくるんですけど、わけ分かんないんです。1、2回生で「開区間」の概念を教えるときは「両端含まない、Aより大きくてBより小さい区間を開区間と言う」と教えるわけです。両側空いてるんだから開区間、閉じてたら閉区間だ。分かりやすい。 nishio~.icon物理的なイメージがあるわけですね、
光成 滋生.iconところが3回生で「開集合」の概念を教えるときは「この条件を満たすものを開集合と言う」って教える。いきなり逆転するんです。 参考までに岩波数学辞典第3版による開集合の定義を、数学記号を日本語に置き換えて雰囲気だけお伝えします。 集合$ Xの部分集合の集合$ Dが
$ Xと空集合を含む。
$ O_1、$ O_2が$ Dの要素なら$ O_1と$ O_2の共通部分集合も$ Dの要素である。 ある集合$ \Lambdaのすべての要素$ \lambdaについて$ O_\lambdaが$ Dの要素であれば、ある集合$ \Lambdaのすべての要素$ \lambdaについて$ O_\lambdaの和集合をとったものも$ Dの要素である。
の3つの条件を満たすとき、$ Dを開集合系と言い、$ Dに属する集合$ Oを開集合と言う。 nishio~.icon性質で定義されてるわけですね。 「こういう性質を持ったものは、何であっても『開集合』だ」、と。
それまでは「『開区間』というのはこうものだ」と定義してから「開区間にはこういう性質があります」と性質を語る方向だったのが、逆転するということですね。
光成 滋生.iconうん、で、これを理解するのにすごく考える、すごい時間考える。
nishio~.iconそれは「この条件を外したらどうなるのか」っていうのをいろいろ試してみる?
光成 滋生.iconそれもそうだし、一番単純な例では「ああ、これも開区間、これも開区間」って書くわけ。
具体例を自分で作っているnishio.icon
例えば測度論をやるまで「面積」なんて当たり前にあるものだったわけです。 nishio~.icon面積なんて自明だと思っていた、と。なのに……。 光成 滋生.iconそれが測度論になったら「何々を満たすものを面積と言う」と言われて「はあ?」みたいな。
参考までに岩波数学辞典第3版での測度論の説明を、数学記号を一部日本語に置き換えて雰囲気だけお伝えします。
空間Xの有限加法族Mを定義域とする実数値の集合関数mが
値域が0以上無限大以下で、空集合φについての値m(φ)は0。
AとBがMの要素で、AとBの共通部分が空集合なら、m(AとBの和集合)はm(A) + m(B) である。
の2条件を満たすとき、mをM上の有限加法的測度と言う。
素朴に考えている「面積」というのは、この有限加法性測度の一例です。
nishio~.iconなるほど。
光成 滋生.icon何でそれが面積と呼ばれるものなんだっていうのを考える。これにすごい時間がかかる。
nishio~.iconそこに時間をたくさん投入して基礎をかっちり固めることが後々有益だということですね。少なくとも、時間がたくさんある学生さんに対しては。
光成 滋生.icon有益というか……数学はそこが大事なんだと思います。
nishio~.icon判断基準が「有益かどうか」じゃない? 質問が上手いな〜と思ったblu3mo.icon
光成 滋生.icon物理の勉強法で「説明したいこと」があって、その説明のために多少のギャップに目をつぶりつつ、飛び石でポンポン進めて全体像を理解するのと、数学の勉強法で「定義」があって、なぜそうなったのか、もっといい定義はないのか、と考える訓練をするのでは全然方向性が違う。だから定義の理解にかける時間を飛ばしても意味がない。
「有益かどうか」とは違う基準
nishio~.icon僕は「有益かどうか」が何をどう学ぶかの判断基準なのですけど、光成さんは「これを学んで有益かどうか」ってことはあんまり意識しないのですか?
光成 滋生.iconまあ、そうですね。
nishio~.icon価値観の違いがあるんですね。有益かどうかで決まらないのなら、何で決まるんですか?
光成 滋生.icon何だろうな。いかにシンプル、きれいか。
nishio~.icon数学の方がおっしゃる「きれい」という言葉は、一般の人には伝わりにくいですね。
光成 滋生.icon物理だって、シンプルな、一番条件が少ないものがいい理論って言いますよね。
nishio~.icon少ない条件でシンプルに記述できるものが良い、と?
光成 滋生.iconでもそういうの勉強するときってもう既に与えられたものが多いからなあ、何だろうな。何が本質かっていうのを考える?
光成 滋生.icon何だろう……。本質、何だろうな……。
nishio~.icon何が本質かっていうのは分からないけど「本質を追い求めよう」という強いモチベーションがあるっていうことなんですかね。「真に正しいものは何か?」みたいな?
光成 滋生.icon正しい、正しい……。あるものを説明するときに、一番そぎ落とした方法で……、これだと同じ話になっちゃうな、本質か。
nishio~.iconそぎ落として一番簡潔な方法で説明したいということですか?
光成 滋生.iconそうなんでしょうね、たぶん。
◆◆◆
nishio~.icon
小崎さんは有用性に価値を見出しています。なので、「分からないものに対して意外なところで役に立つことがある」という経験から有用性を見出し、学ぶモチベーションを作り出しています。一方、光成さんは有用性に価値を見出していません。分からないものに対して「分かりたい」「犯人を見つけたい」という欲求が、学ぶモチベーションを作り出しているようです。 ところで「一番条件の少ないものが良い」という考え方は、エルンスト・マッハの「科学の根本的原理は、なるべく多くの現象をなるべく少数の概念で記述することで、考える労力を節約することだ」(思惟経済説)の流れを汲むものなので、実はこれも有用性の視点なんですよね。物理学と数学が大きく違うのは「現象」の部分です。物理学は人間の外にある現象を扱うのに対し、数学は人間が考えることで作り出した現象も扱うわけです。 ◆◆◆
第2回では「教科書を一字一句読む」という勉強法が紹介されました。たとえば読者のみなさんが機械学習に興味があるとしましょう。良い教科書だと評判の「パターン認識と機械学習」(通称「PRML」)を買ってきて、ページを開くと数式だらけでさっぱり分からない……。こういう悩みは多くの人が持っているのではないかと思います。今回はそこを掘り下げていきます。
◆◆◆
数式だらけの本をどう読むのか
nishio~.iconたとえば最近だと機械学習が話題ですよね。
そうすると数式がいっぱい書かれていて「全然頭に入ってこない、どうしたらいんだろう」という悩みを抱えるというケースがあると思うんです。
そんな人に何かアドバイスをするとしたら、どうします?
光成 滋生.iconあれは単に計算するだけなんで、頭を使うとかじゃないよね。
nishio~.icon……「単に計算するだけ」と言うけども、要は計算をしないといけないんですよね。
光成 滋生.iconいや、それも認めりゃ別にしなくていいわけです。
nishio~.icongivenなもの(与えられたもの)として認めるってことですか。 nishio~.iconなるほど、アドバイスとしては、時間をかけられないのなら「そういうもの」だと認めよう、時間かけられるんだったら納得いくまで緻密に計算して一歩ずつ進んでいこう、ということですか? 光成 滋生.iconはい。立場にもよるでしょうが、私は大学生のような時間がいっぱいある人だったら、つまみ食いで先に進むよりは、確固としたものを手に入れるほうが応用範囲は広い気がします。
時間がないときにはどうするのか
nishio~.icon時間のたくさんある学生さんは基礎からがっちりと時間をかけるのが良いという話だと思うんですけど、
社会人で「それほど時間かけられないよ」って方もいるかと思います。
そういう人はどうしたらいいか?
どうするとたとえばPRMLを読んで理解できるようになるのか?
何か具体的なライブラリが使えるようになりたいとか。
じゃあ、それを使えるようになるためだけやりゃあいいんです。
ベクトルや行列の計算できないときに、それに労力をかけたくない人がそこを読む必要はないんです、
それよりはライブラリのマニュアルを読むとか、それを使ってる何か論文とかを見るほうがいい。
nishio~.iconなるほど。
光成 滋生.icon「PRMLを読むためにどうするか」っていうのはすでに目的がずれてる。
nishio~.icon何かツールを使うのが目的なのか、PRMLを読むのが目的なのか?
nishio~.icon緻密に積み上げて数式を追っていくしかない?
ラボでPRMLを読んだときは……
nishio~.iconサイボウズ・ラボの機械学習勉強会でPRMLを読もうという話になったとき、どう読むかで議論になりましたね。
光成 滋生.iconPRMLの読み方の議論になったとき、主催の中谷さんの目的は最先端の論文を自分で読んで解釈できるようになる力をつけることだった。私はその目的に賛成も反対もできる状態ではなかったし、PRMLを読んで何かやりたい目的があったわけでもない。なので、自分がやってた数学のやり方で読もうと考えた。
光成 滋生.iconそうするしかないよね。代替手段を思いつかなかったから。
nishio~.iconなるほど。
光成 滋生.iconほぼスキップして終わったところで、そのあとどうするか具体的な目的がないんだったら、ゆっくり読むほうが有益だと考えた。
nishio~.icon一方あのとき僕は「この分野どんな道具があるのかの大まかな地図を手に入れて、道具を使って実際に何かをやることができるようになることを目指してスピーディに進むべきだ」と考えたわけです。
地図を手に入れなければどこに行こうという具体的な目的も生まれないし、
試してみるための道具がなければ試行錯誤から学ぶこともできない、と。
光成 滋生.iconそうですね。
nishio~.icon結局数学系の主張が勝って、週2回、各1時間で8カ月、全部で100時間をかけて読んだわけです。
その結果、僕は今は「ツールもどんどん陳腐化して新しいものが出てくるから、それを習得するコストはどうしても必要になる。ちゃんと数式を追っておくとそこのコストが下がる」と考えるようになって、結果としてすごく良かったと思っています。
100時間は結構早い気もする基素.icon
勉強会の時間が100時間なので、発表をする人の準備時間は入ってないnishio.icon
光成 滋生.iconPRMLを読みたいって学生で、ツールを使って論文を書いて卒業することだけが目的で、卒業後はやらないんだったら、さらっと読んだっていいと思います。卒業後も何かしていこうと思うんだったら、たとえば式変形が分からないんだったら、それに必要な教科書を見るしかない。
光成 滋生.iconまぁあれで足りないんだったら、また別の読むとか、そういう手段を取るしかないんじゃないかな。
教科書がないケース
nishio~.iconあとですね、数学の話もPRMLの話も、両方教科書があるものを学ぶケースだったと思うんですけど、教科書がないものを学ぶときっていうのはどうしたらいんでしょうね? 光成 滋生.icon何だろう、たとえばどんな?
nishio~.iconたとえば、Linuxカーネルについて詳しくなりたい場合って、整備された教科書ってないですよね? 光成 滋生.iconまあ、そうですね。
nishio~.iconそういう場合「教科書を一歩ずつ読んでいく」という学び方がそもそも使えないわけですけど、そういうときはどうするんですか? たとえばLinuxカーネルについて理解したい、理解することが仕事の上で実用上必要だという状況でです。
光成 滋生.iconそれは、問題ドリブンじゃないのかな。ネットワークの何かを解決したいんだったら、ネットワーク周りのところから見る。その場合はブートシーケンスとかはいらないし。 nishio~.icon解決したい目的の明確化が必要で、それに必要なところからやる、と?
(風穴) でもLinuxカーネルも全然知識がなく読み始めると大変じゃないですか。CはCですけど、いろいろ特有の関数とかマクロとかありますし。最初はやっぱり結構コストは高いと思うんですけど。
光成 滋生.iconうーん、やっぱりそこもどこまで展開するかじゃないですかね。ざっくり見たいって言うんだったら、なんか知らない関数が出てきたとして、Linuxのカーネルだったら変な名前ってあんまりないから、関数名とか見て「とりあえずそういうもんなんだ」って、そのレイヤーで止めて読み進める。時間があればあとからもう一段階深く読む。
nishio~.icon細かいものはgivenと認めて深追いしない、と?
光成 滋生.icon幅優先でやったほうがいいと思いますけどね。 この方策の方が不確実性は減らせそう基素.icon
◆◆◆
nishio~.icon
「本を読んだら数式だらけだ、どうしよう」というFAQに対して、まずは目的を明確化することが大事というお話でした。 目的が「その数式を読めるようになること」であれば、楽な抜け道などはなく納得いくまで時間をかけて一歩ずつ進むしかない、
目的が「ツールとして使うこと」なのであれば、分からない数学を深追いはせず「そういうものだ」と認めて先に進めばいい、とのことです。
どちらの戦略をデフォルトにするかは筆者と光成さんとで違いがありました。
物理学科出身の小崎さんも「分からないときはとりあえず先に進む」(第6回)という話でしたね。
数学の本は分からないときに「とりあえず先に進む」としてもよりいっそう分からなくなることが多いです。
わかる基素.icon
これはおそらく数学の本が「光成さんスタイルの読み方をすること」を前提として書かれているからなのでしょう。
読もうとしている本の書かれ方や、何を目的として読むのかを意識して、読み方を切り替えていくことが有用だと感じました。
光成さんもLinuxカーネルについて勉強するときは、問題ドリブンで、深追いせずに幅優先探索をするとのこと。 ところで、サイボウズ・ラボ社内の機械学習勉強会は2011年2月から8カ月かけて行われ、この記事執筆時点で終了から3年が経ちます。今振り返って考えると、この勉強会で学んだことは3年の間PRML以外の本や論文を読む際に何度も使われました。今後もずっと使われることでしょう。初期投資はとても高かったですが、とても長期にわたってリターンが得られる投資物件だったと感じています。(了)
感想
深さ優先と幅優先を切り替える(どの程度重視するかを悟って適応する)才能、みたいなのはあるかもしれない?
これの才能があると、最短100時間で理解しきれるところを100時間くらいで理解しきれる
これの才能がないと(深さ優先にすべきを幅優先しちゃうとか、その逆をするとかして)200時間かかったりする
深く潜れる才能と、幅を広げる才能もありそうだなぁ
あるいはモチベの強さ?
深さに憧れる人なら深く潜る方が強くなるだろうし、幅広さ知りたい人なら幅広げる方が強くなるだろう
あるいは資質?
inajob.icon
動けばヨシ
プログラミングとかも動けばヨシの分野だろう
もちろん積み上げて行くのも有益な学び方だとは思う
実装主義と言っているのは、この記事で言うつまみ食いの読み方っぽい 目的ありきだし